#ifndef xpack_lang_cxx_length_if_item_as
#define xpack_lang_cxx_length_if_item_as
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::lang_cxx::inc
#include"define/base_type.hpp"
#include"lang/cxx.hpp"
#include"lang/wxx/length_if_as_utf8.hpp"
#include"lang/wxx.hpp"
#pragma pop_macro("xuser")

namespace mixc::lang_cxx{
    template<class item_t>
    template<inc::is_base_char char_t>
    inline uxx cxx<item_t>::length_if_item_as() const {
        // 相同类型的串之间转换以及宽字符串之间的转换
        if constexpr (
            (sizeof(char_t) == sizeof(item_t)) or 
            (sizeof(char_t) >= 2 and sizeof(item_t) >= 2)
        ){
            return xthe->length;
        }

        // 宽字符串转多字节串
        else if constexpr (sizeof(char_t) == 1){
            uxx i;
            uxx length = 0;
            for(i = 0; i < xthe->length;){
                length += inc::wxx<item_t>{ xthe[i] }->length_if_as_utf8;
                i += 1;
            }
            return length;
        }

        // 多字节串转宽字符串
        else{
            uxx i;
            uxx length = 0;
            for(i = 0; i < xthe->length;){
                i += inc::wxx<item_t>{ xthe[i] }->length_if_as_utf8;
                length += 1;
            }
            return length;
        }
    }
}

#endif
